﻿using System;
using System.Windows.Forms;
using ProyectoActivos.Daos;
using ProyectoActivos.Validate;
using EntitiesAndMappings.Entities;
using System.Collections.Generic;
using ProyectoActivos.Util;
using ProyectoActivos.Const;

namespace ProyectoActivos.Forms.Operaciones
{
    public partial class FrmTareo : Form, IValidateForm
    {
        public static FrmTareo Activo { set; get; }
        private Boolean _valido;
        private TareoDAO tareoDAO;     

        public FrmTareo()
        {
            InitializeComponent();
            tareoDAO = new TareoDAO();
            dGridResultado.AutoGenerateColumns = false;
            _valido = true;
        }

        public void Invalid()
        {
            _valido = false;
        }

        public Boolean IsValid()
        {
            return _valido;
        }

        private void FrmTareo_Load(object sender, EventArgs e)
        {


            cmbTipoTrabajoTareo.Items.Add(new ItemGenericoComboBox() { Id = 0, Descripcion = " - Todos" });
            cmbTipoTrabajoTareo.Items.Add(new ItemGenericoComboBox() { Id = Tareo.ID_TRABAJO, Descripcion = Tareo.CADENA_TRABAJO });
            cmbTipoTrabajoTareo.Items.Add(new ItemGenericoComboBox() { Id = Tareo.ID_DESCANSO, Descripcion = Tareo.CADENA_DESCANSO });
            cmbTipoTrabajoTareo.Items.Add(new ItemGenericoComboBox() { Id = Tareo.ID_TRANSITO, Descripcion = Tareo.CADENA_TRANSITO });
            cmbTipoTrabajoTareo.Items.Add(new ItemGenericoComboBox() { Id = Tareo.ID_VACACIONES, Descripcion = Tareo.CADENA_VACACIONES });
            cmbTipoTrabajoTareo.SelectedIndex = 0;

            ActionExecutor.Execute(this, delegate
            {
                var proyectoDAO = new EntidadGenericaDAO<Proyecto>();
                cmbProyecto.DataSource = FormUtils.AddFirst(proyectoDAO.ListarActivos(), new Proyecto { Codigo = "", Descripcion = "Todos" });
                
                var loteDAO = new EntidadGenericaDAO<Lote>();
                cmbLote.DataSource = FormUtils.AddFirst(loteDAO.ListarActivos(), new Lote { Codigo = "", Descripcion = "Todos" });
               
                var lugarDAO = new EntidadGenericaDAO<Lugar>();
                cmbLugar.DataSource = FormUtils.AddFirst(lugarDAO.ListarActivos(), new Lugar{ Codigo = "", Descripcion = "Todos" });
             
            });
        }

        private void btnBuscar_Click(object sender, EventArgs e)
        {
            _valido = true;
            errorProvider.Clear();


            txtApellidos.Text = txtApellidos.Text.Trim();
            txtNombres.Text = txtNombres.Text.Trim();


            var tareo = new Tareo()
            {
                Fecha = datFecha.Value.Date,
                Trabajador = new Trabajador(){Apellidos = txtApellidos.Text,Nombres=txtNombres.Text}
            };
          
            if(cmbProyecto.SelectedItem != null)
            {
                tareo.Proyecto = (Proyecto) cmbProyecto.SelectedItem;
            }
            
            if(cmbLote.SelectedItem != null)
            {
                tareo.Lote = (Lote) cmbLote.SelectedItem;
            }

            if(cmbLugar.SelectedItem != null)
            {
                tareo.Lugar = (Lugar) cmbLugar.SelectedItem;
            }

            if(cmbTipoTrabajoTareo.SelectedItem != null)
            {
                tareo.TipoTrabajoTareo = ((ItemGenericoComboBox)cmbTipoTrabajoTareo.SelectedItem).Id;
            }
               
                 
              

            ActionExecutor.Execute(this, delegate
            {
                var tareoDAO = new TareoDAO();
                dGridResultado.DataSource = tareoDAO.Buscar(tareo);
            });
        }

        private void toolStripModificar_Click(object sender, EventArgs e)
        {
            if (dGridResultado.SelectedRows.Count > 0)
            {

                var tareo = (Tareo)dGridResultado.CurrentRow.DataBoundItem;
                var form = new FrmEditarTareo(tareoDAO.Refresh(tareo));
                form.ShowDialog(this);
                if (!form.CerroSinAccion)
                {
                    btnBuscar_Click(sender, e);
                }
            }
            else
            {
                MessageBox.Show(@"Debe seleccionar un elemento");
            }
        }

        private void tStripButtonEliminar_Click(object sender, EventArgs e)
        {
            if (dGridResultado.CurrentRow == null)
            {
                return;
            }

            var tareo = (Tareo)dGridResultado.CurrentRow.DataBoundItem;
            tareoDAO.Delete(tareo);
            btnBuscar_Click(sender, e);
        }

        private void tStripButtonCrear_Click(object sender, EventArgs e)
        {

            if (MessageBox.Show("Se creará el tareo para el día " + datFecha.Value.ToShortDateString() + ". Desea proceder?", "Crear Tareo", MessageBoxButtons.YesNo) == DialogResult.Yes)
            {
                int resultado = tareoDAO.CrearFechaTareo(datFecha.Value.Date);
                MessageBox.Show(resultado.ToString());
                LimpiarFiltros();
                btnBuscar_Click(sender, e);
            }
        }

        private void LimpiarFiltros()
        {
            txtApellidos.Clear();
            txtNombres.Clear();
            cmbLote.SelectedItem = null;
            cmbProyecto.SelectedItem = null;
            cmbLugar.SelectedItem = null;
            cmbTipoTrabajoTareo.SelectedItem = null;
        }

        private void tStripButtonDuplicarDia_Click(object sender, EventArgs e)
        {
            var form = new FrmCopiarDiaTareo(datFecha.Value.Date);
            form.ShowDialog(this);
            if (!form.CerroSinAccion)
            {
                btnBuscar_Click(sender, e);
            }
            

        }

    }
}
